<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * 文章模型类
 * @author wb_wenjie.wuwj <wb_wenjie.wuwj@alibaba-inc.com>
 * @copyright 2013-2-20
 */

class Article_m extends MY_Model
{
	function __construct()
	{
		parent::__construct();
		
		// 加载上传设置参数
		$this->config->load('upload');
	}
	
	/**
	 * 查询文章数量
	 */
	function get_article_count()
	{
		return $this->count_all('article');
	}
	
	/**
	 * 查询文章状态标识
	 * @param array $where 查询条件
	 * @param string $limit 返回结果数
	 * @return boolean
	 */
	function get_article_state($where, $limit = '1')
	{
		return $this->get_state('article', $where, $limit);
	}
	
	/**
	 * 查询文章内容
	 * @param array $where 查询条件
	 * @param string $order 排序方式
	 * @param string $limit 查询返回结果数
	 * @return boolean
	 */
	function get_article($where, $order = 'ID DESC', $limit = '1')
	{
		$this->db->select("article.*,column.fatherid,column.columnname,article_content.content,article_content.keyword");
		$this->db->from('article');
		$this->db->join('column', 'column.id=article.classid', 'LEFT');
		$this->db->join('article_content', 'article_content.articleid=article.id', 'LEFT');
		$this->db->where($where);
		$this->db->order_by($order);
		$this->db->limit($limit);
		$query = $this->db->get();
		return $query->result_array();
	}
	
	/**
	 * 根据偏移量查询文章内容，与分类表内联查询
	 * @param array $limit
	 * @param string $order
	 * @return array
	 */
	function show_article($limit, $order = 'id desc')
	{
		$this->db->select("article.*,column.fatherid,column.columnname");
		$this->db->from('article');
		$this->db->join('column', 'column.id=article.classid', 'LEFT');
		$this->db->order_by($order);
		$this->db->limit($limit['limit_end'], $limit['limit_from']);
		$query = $this->db->get();
		
		return $query->result_array();
	}
	
	/**
	 * 根据文章id删除文章及文章内容表记录，并解除与文章附件的id绑定
	 * @param array $id
	 * @return boolean
	 */
	function delete_article_by_id($id)
	{
		$this->delete_content(array('articleid' => $id));
		$this->load->model('attachment_m');
		
		// 将要删除的文章附件表记录中bindid标记为0，不做删除
		foreach ($id as $value)
		{
			$this->attachment_m->update_attachment(array('bindid' => $value, 'type' => 'article'), array('bindid' => 0));
		}
		
		$result = $this->delete_record('article', array('id' => $id));
		return $result;
	}
	
	/**
	 * 删除文章内容表记录
	 * @param array $where 删除条件
	 * @return boolean
	 */
	function delete_content($where)
	{
		return $this->delete_record('article_content', $where);
	}
	
	/**
	 * 添加文章内容
	 * @param array $article 文章表内容
	 * @param array $content 文章内容表
	 * @param array $attachment 附件内容
	 * @return boolean|unknown
	 */
	function insert_article($article, $content, $attachment)
	{
		$result = $this->insert('article', $article);
		$article_id = $this->db->insert_id();
		if(!$article_id)
		{
			return FALSE;
		}
		else
		{
			$content['articleid'] = $article_id;
			$this->insert_article_content($content);
			if (!empty($attachment))
			{
				$this->load->model('attachment_m');
				$attachment['bindid'] = $article_id;
				$this->attachment_m->insert_attachment($attachment);
			}
			return $article_id;
		}
	}
	
	/**
	 * 添加文章内容记录
	 * @param array $data 添加内容
	 * @return boolean
	 */
	function insert_article_content($data)
	{
		// @TODO 处理文章ID存在的问题
		return $this->insert('article_content', $data);
	}
	
	/**
	 * 更新文章
	 * @param array $where 更新条件
	 * @param array $data 更新内容
	 * @return boolean
	 */
	function update_article($where, $data)
	{
		return $this->update('article', $where, $data);
	}
	
	/**
	 * 更新文章内容表
	 * @param array $where 更新条件
	 * @param array $data 更新内容
	 * @return boolean
	 */
	function update_article_content($where, $data)
	{
		return $this->update('article_content', $where, $data);
	}
}